package priv.pront.code.lanqiao.competition.course.date0328;

import java.util.Scanner;
import java.util.Vector;

//fixme error
public class 第十届省赛C组_人物相关性 {
    private static Vector<Integer> alice = new Vector<>();
    private static Vector<Integer> bob = new Vector<>();
    private static int K;
    private static String data = null;

    public static boolean check(int i, int num, String peopleSuf, boolean isAlice) {
        // 看前面
        if (i - 1 >= 0) {
            int preChar = data.charAt(i - 1);
            if ((preChar >= 65 && preChar <= 90) || (preChar >= 97 && preChar <= 122)) {
                // 如果是字母，就直接返回
                return false;
            }
        }
        String nextFourChar;
        // 从当前字符开始算，看后第5个字符是否为字母
        if (i + num < data.length()) {
            int nextFifthChar = data.charAt(i + num);
            if ((nextFifthChar >= 65 && nextFifthChar <= 90) || (nextFifthChar >= 97 && nextFifthChar <= 122)) {
                // 如果是字母，就直接返回
                return false;
            }
            nextFourChar = data.substring(i + 1, i + num);
        } else {
            // 右边没有字符了，直接取到最后
            // 查看后四个字符是否为lice
            nextFourChar = data.substring(i + 1);
        }
        if (nextFourChar.equals(peopleSuf)) {
            // 是Alice，记录此时的i索引
            if (isAlice) {
                alice.add(i);
            } else {
                bob.add(i);
            }
            return true;
        }

        return false;
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        K = Integer.parseInt(input.nextLine());
        data = input.nextLine();
        input.close();

        // 1、先扫描一遍字符串，将其中的Alice和Bob出现的所有索引都记录下来
        int index = 0;
        while (index < data.length()) {
            if (data.charAt(index) == 'A') {
                if (check(index, 5, "lice", true)) {
                    index += 5;
                } else {
                    index++;
                }
            } else if (data.charAt(index) == 'B') {
                if (check(index, 3, "ob", false)) {
                    index += 3;
                } else {
                    index++;
                }
            } else {
                index++;
            }
        }

        // 2、遍历每一个Alice，通过双指针去实现在每一个Alice[alice[i] - K - 3, alice[i] + K + 3]范围内有多少个，依次做累加
        // 定义两个指针，初始都为0，两者都代表当前是的第几个Bob，只不过这里第1个Bob，下标是0
        // 用于累加
        long ans = 0;
        int left = 0, right = 0; // left和right是两个集合的下标，而取出来的也是下标，不过取出来的下标是在输入字符串中的下标
        for (int i = 0; i < alice.size(); i++) {
            /*
                每次取Bob的下标跟alice.get(i) - K - 3进行比较，外层循环是遍历每一个Alice，而循环内部是找出该Alice左边K范围内的Bob和
                右边K范围内的Bob之和
             */
            // 以下两个while是用来确定当前Alice能够与Bob同时出现的最大范围，也就是left与right之间的距离
            // 先固定住左边界，然后移动右边界
            while (left < bob.size() && bob.get(left) < alice.get(i) - K - 3) {
                left++;
            }
            // 注意：这里的==一定要算在内
            while (right < bob.size() && bob.get(right) <= alice.get(i) + K + 5) {
                right++;
            }
            // 此时bob.get(right) > alice.get(i) + K + 5 所以这里是要算right - 1与left之间有多少个数（包含两个边界）
            if ((right - 1) - left + 1 > 0) {
                // 判断距离是否大于零，若大于0，则表示当前的Alice对应的这个范围有与她同时出现的Bob
                ans += ((right - 1) - left + 1);
            }
        }
        System.out.println(ans);
    }
}
